package thread;

public class ThreadDemo14 {
    public static void main(String[] args) {
        //现在有两个变量，把两个变量自增加100亿次（典型的CPU密集型场景
        //可以一个线程，先针对a自增，在针对b自增
        //还可以两个线程分别对a和b自增
        serial();
        concurrency();
    }

    //串行执行，一个线程完成
    public static void serial() {
        //为了衡量带没带的速度。加上一个计时的操作。
        //curretTimeMillis 获取当前系统的 ms 级时间戳
        long beg = System.currentTimeMillis();//得到开始的时间戳
        long a = 0;
        for (long i = 0; i < 100_0000_0000L; i++) {
            a++;
        }

        long b = 0;
        for (long i = 0; i < 100_0000_0000L; i++) {
            b++;
        }
        long end = System.currentTimeMillis();//得到结束的时间戳
        System.out.println("单线程执行时间：" + (end - beg) + "ms");
    }

    //使用两个线程来完成
    public static void concurrency() {
        Thread t1 = new Thread(() -> {
            long a = 0;
            for (long i = 0; i < 100_0000_0000L; i++) {
                a++;
            }
        });

        Thread t2 = new Thread(() -> {
            long b = 0;
            for (long i = 0; i < 100_0000_0000L; i++) {
                b++;
            }
        });

        //开始的时间戳
        long beg = System.currentTimeMillis();
        t1.start();
        t2.start();
        try {
            //等待两个线程都结束了以后才开始统计时间
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //结束的时间戳
        long end = System.currentTimeMillis();
        System.out.println("多线程执行的时间：" + (end - beg) + "ms");
    }
}
